Why I love JavaScript
@yusuktan: 今日の #funabashidev の懇親会で、過去一で自分がJavaScriptエコシステムが好きな理由を言語化できた気がする。文字起こししたい
@2323_code: @yusuktan 気になります!
後方互換性を保っている
Webを壊さない
しかし、新しい機能の追加も積極的に議論されている
新しい機能の追加が民主的に行われている
過去のWebの歴史を反省
寡占的にならないように
特定の企業が独断・独占的にある機能を実装しないように
・仕様がさき、実装があと
ECMAScriptがある
TC39がある
WinterTCがある
他の言語では、「実装こそが、仕様である」となりがち
パッと思いつくところだと、Rubyとか、Rustとか、Pythonとか
しかしJavaScriptはそうではない
民主的に決められた、自然言語での仕様が先にある
それをもとに各エンジンは実装を行う
ビッグテックにより支えられている処理系もあるし
V8 (Google)
JavaScriptCore (Apple)
SpiderMonkey (Mozilla)
小規模な処理系もある
小規模な処理系であっても、ニッチな領域で評価され、使われることは普通にある
mujs
quickjs
Wikipediaに List of JavaScript engines というページがあるくらいにはたくさんある
List of JavaScript engines - Wikipedia( https://en.wikipedia.org/wiki/List_of_JavaScript_engines )
普段他の言語に触っている人から見て、JavaScriptランタイムが複数あって「面倒だなあ」と思うのは、ある意味自然
複数ランタイム(処理系)がある言語は珍しい
Javaは複数ある
C, C++も複数ある
RubyやPythonも複数あるといえばあるけど、圧倒的にメインのもののシェアが大きい(という認識)
あれ、意外とある…?
でもJavaScriptはやっぱり特異さを放っている
各ブラウザ内のレンダリングエンジン (Blink, WebKit, Servo etc.)
Node.js
Deno
Bun
Cloudflare Workers
etc...
こんなに多数が共存しながら繁栄しているのは特別
JavaScriptは「仕様が先」だからこそ複数ランタイムが乱立しうるし、「君だけの最強ランタイムを作ろう!」という野心も成立しうる
ECMAScriptに関しては、test262というテストスイートも用意されている。これを通しさえすれば、「君だけの最強ランタイム」を作ることができる
GitHub - tc39/test262: Official ECMAScript Conformance Test Suite · GitHub
ECMAScriptの範囲外についても、wpt (web platform test) のようなテストスイートがある
GitHub - web-platform-tests/wpt: Test suites for Web platform specs — including WHATWG, W3C, and others · GitHub
「Webを壊さずに、しかし技術の発展を止めない」という人類の営みが美しい
大昔に書かれたJavaScriptは、基本的には動く
それでいて、ECMAScriptは進化し続ける
後方互換性を保ちつつ、言語としては進化し続けるという「現実味のある進化」の方向性が美しい
言語仕様自体でいえば、当然他のモダン言語のほうが整理整頓されているし、古い言語の古臭い部分を考慮せずに済む
後発言語、例えば自分が好きなRust、は当然素晴らしい言語
過去の言語の良いところを採用し、悪いところを切り捨てる
でもそれって「後だしじゃんけん」だよね
JavaScriptは、「先だしじゃんけん」だけど、新しい言語機能を貪欲に取り込み進化をしつづける
#zenn #tech #javascript #ecmacript #tc39